home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
misc
/
emu
/
Apex-src.lha
/
RAMDSKA3.68K
< prev
next >
Wrap
Text File
|
2001-09-30
|
4KB
|
144 lines
;RAMDSKA3.68K MAR-07-89 (ALSO SEE "INFOSTR")
;RAM DISK HANDLER
;WRITTEN BY LOREN BLANEY FOR DFM ENGINEERING
;
;REVISION HISTORY:
;MAR-07-89, BASED ON RAMDSKA.68K, MODIFIED FOR AMIGA-2000.
;
;WARNING:
;IF THE RAM DISK IS NOT CORRECTLY SIZED, MEMORY CAN BE BOMBED.
;
;INPUTS:
; UNIT: UNIT NUMBER
; NBLKS: NUMBER OF BLOCKS TO READ/WRITE
; FADDR: ADDRESS IN MEMORY TO WRITE/READ
; BLKNOX: BLOCK ON THE DISK TO START READ/WRITE
NOLIST
INCLUDE SYSPAG
LIST
UNTNUM EQU 2 ;UNIT NUMBER OF FIRST RAM DISK
; (SECOND RAM DISK = UNTNUM + 1)
SIZE EQU 1024 *256 ;MAX SIZE: 1024 BLOCKS
; (ALSO SEE "INFOSTR" AND "MAXTBL"
BASE0 EQU $C00000 ;BASE ADDRESS OF EXPANSION RAM
BASE1 EQU $020000 ;BASE ADDRESS OF RAM DISK SPACE
;HANDY COMPARISON CHART:
; HEX BYTES MEGA BYTES BYTES BLOCKS
; $40000 1/4 262,144 1024
; $80000 1/2 524,288 2048
; $C0000 3/4 786,432 3072
; $100000 1 1,048,576 4096
CIAA EQU $BFE001 ;8520-A
ORG $7D710
START EQU @ ;ADDRESS WHERE THIS HANDLER STARTS
;-----------------------------------------------------------------------
;
RAMDSK DC.L DUMMY ;0
DC.L DUMMY ;1
DC.L READ ;2
DC.L WRITE ;3
DC.L DUMMY ;4
DC.L GETINFO ;5
DC.L DUMMY ;6 (SPARE)
DC.L DUMMY ;7 (SPARE)
;-----------------------------------------------------------------------
;READ BYTES FROM RAM DISK AND STORE THEM INTO MEMORY
;
READ MOVEM.L D0-D7/A3-A6,-(SP) ;SAVE REGISTERS
BSR SETUP ;SET UP A5, A6, AND D0
BSR MOVBLK ;MOVE BLOCKS FROM A6 TO A5
MOVEM.L (SP)+,D0-D7/A3-A6 ;RESTORE REGISTERS
DUMMY RTS
;-----------------------------------------------------------------------
;WRITE BYTES FROM MEMORY ONTO THE RAM DISK
;
WRITE MOVEM.L D0-D7/A2-A6,-(SP) ;SAVE REGISTERS
BSR.S SETUP ;SET UP A5, A6, AND D0
EXG A5,A6
BSR.S MOVBLK ;MOVE BLOCKS FROM A6 TO A5
MOVEM.L (SP)+,D0-D7/A2-A6 ;RESTORE REGISTERS
RTS
;-----------------------------------------------------------------------
;RETURN THE ADDRESS OF THE INFORMATION BLOCK IN D0
;
GETINFO MOVE.L #INFO,D0
RTS
INFO DC.L START ;HANDLER START AND END ADDRESSES
DC.L END
DC.L INFOSTR
INFOSTR ASCII 'RAMDSKA3 MAR-07-89 Memory, 1024 blocks'
DC.B 0
;-----------------------------------------------------------------------
;SET UP A5 AND A6 AS MEMORY ADDRESS POINTERS AND D0 AS THE NUMBER OF
; 32-BYTE BLOCKS TO MOVE.
;
SETUP LEA BASE0.L,A6 ;ASSUME EVEN NUMBERED UNIT
BTST #0,UNIT ;CHECK UNIT NUMBER
BEQ.S SU10 ;BRANCH IF IT IS EVEN
LEA BASE1.L,A6 ;GET BASE FOR ODD NUMBERED UNIT
SU10
MOVE.L BLKNOX,D0 ;A6:= BLKNOX * 256 + BASE
ASL.L #8,D0 ; = MEMORY ADDRESS IN RAM DISK
ADDA.L D0,A6
MOVEA.L FADDR,A5 ;A5:= MEMORY ADDRESS
MOVE.L NBLKS,D0 ;D0:= NBLKS * 8
ASL.L #3,D0 ; = NUMBER OF 32-BYTE BLOCKS (256 /32 =8)
RTS
;-----------------------------------------------------------------------
;MOVE D0*32 BYTES FROM A6 TO A5.
; MOST REGISTERS ARE DESTROYED.
;
MOVBLK MOVE.L D0,D1 ;PUT UPPER 16 BITS OF D0 IN D1
SWAP D1 ; FOR THE 16-BIT DBF INSTRUCION
BRA.S MOV20 ;ENTER LOOP AT BOTTOM
MOV10 MOVEM.L (A6)+,A3-A4/D2-D7 ;READ 32 BYTES AT A6
MOVEM.L A3-A4/D2-D7,(A5) ;WRITE 32 BYTES AT A5
ADDA.L #32,A5 ;(POST INCREMENTING IS NOT ALLOWED)
MOV20 DBF D0,MOV10 ;DECREMENT LOW 16 BITS, AND LOOP
DBF D1,MOV10 ;DECREMENT HIGH 16 BITS, AND LOOP
RTS
IF @ >= $7D800
ERROR -- TOO BIG
ENDIF
END EQU @-1 ;ADDRESS OF END OF HANDLER
;======================================================================
;HOOK THIS HANDLER INTO THE UNIT-HANDLER TABLE
;
ORG MAXTBL + 4 *UNTNUM
DC.L SIZE /256
DC.L SIZE /256
ORG OFFTBL + 4 *UNTNUM
DC.L 0
DC.L 0
ORG UNTTBL + 4 *UNTNUM
DC.L RAMDSK
DC.L RAMDSK
END
DC.L SIZE /256
ORG OFFTBL + 4 *UNTNUM
DC.L 0
DC.L 0
ORG UNTTBL